// 互斥锁
/*
当线程 对共享资源 做了操作的时候  不管是读或者是写 都需要上锁
*/

#include <head.h>

// 声明互斥锁
pthread_mutex_t mutex;

// 静态声明 初始化互斥锁 用这种方式可以不用使用  pthread_mutex_init 函数
// pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;

// 全局变量   计数
int con = 1;

// 每一秒钟 对数值进程一次加加
void * pthread_Func_1(void * arg)
{
    con = 0;
    while (1)
    {
        // 上锁
        sleep(1);
        pthread_mutex_lock(&mutex);

        con++;
        // 解锁
        pthread_mutex_unlock(&mutex);
        
    }
    
}

// 当计数值发生更改时 打印出来
void * pthread_Func_2(void * arg)
{
    int temp = con;
    
    
    while (1)
    {
        // 上锁
        pthread_mutex_lock(&mutex);
        if (con == temp)
        {
            printf("con = %d\n" , con );
            temp++;
        }
        // 解锁
        pthread_mutex_unlock(&mutex);
    }
    
}

int main(int argc, char const *argv[])
{

    // 初始化互斥锁 在主线程中定义
    pthread_mutex_init(&mutex , NULL);

    // 创建线程
    pthread_t tid_1 = 0;
    pthread_t tid_2 = 0;

    if(pthread_create(&tid_1 , NULL , pthread_Func_1 , NULL) != 0)
    {
        printf("线程创建失败\n");
        return 1;
    }
    
    if(pthread_create(&tid_2 , NULL , pthread_Func_2 , NULL) != 0)
    {
        printf("线程创建失败\n");
        return 1;
    }
    
    pthread_join(tid_1 , NULL);
    pthread_join(tid_2 , NULL);


    // 销毁互斥锁
    pthread_mutex_destroy(&mutex);

    
    return 0;

}
